#pragma once

template <typename Key, typename Val, typename Hash>
class _hHashMapIterator
{
	hHashMap<Key, Val, Hash>* _pMap = NULL;
	_hHashMapNodeBase<Key, Val>* _pNode = NULL;

	friend hHashMap<Key, Val, Hash>;
	template <typename Key, typename Val, typename Hash, size_t... P>
	friend struct _hHashMapNode;
public:
	std::pair<const Key, Val>* operator->();
	std::pair<const Key, Val>& operator*();
	_hHashMapIterator& operator++();
	_hHashMapIterator operator++(int);
	bool operator==(const _hHashMapIterator& other) { return _pMap == other._pMap && _pNode == other._pNode; }
	bool operator!=(const _hHashMapIterator& other) { return !(*this == other); }
};